class Solution {  //暴力枚举O(n)
public: /*三种情况：1.递减, nums[0]>nums[1],因为nums[-1]=负无穷,nums[0]为峰值;
2.递增, nums[n-1]<nums[n-2],因为nums[n]=负无穷,nums[n-1]为峰值; 3.中间存在某段区间内呈递增到递减*/

    int findPeakElement(vector<int>& nums) {
    int i = 0; 
    for(; i < nums.size() - 1; i++)
    {
        if(nums[i] > nums[i + 1]) break; 
    }
    return i; 
    }
};

class Solution { /*二分查找，二段性 ——》根据讨论nums[i]与nums[i+1]值，
分成两部分(nums[mid]<nums[mid+1] ,nums[mid]>nums[mid+1])*/
public:
    int findPeakElement(vector<int>& nums) {
    int left = 0, right = nums.size() - 1;
    while(left < right)  //循环条件
    {
        int mid = left + (right - left) / 2; //中点的选择(后面无+1，中点无需+1)
        //峰值一定存在右边，左边不一定存在峰值，因为nums[n]=负无穷
        if(nums[mid] < nums[mid + 1]) left = mid +1; 
         //峰值一定存在左边，右边不一定存在峰值，因为nums[-1]=负无穷
        else right = mid;
    }
    return left;
    }
};